#ifndef GY_GRAPHICSLINEARTICK_H
#define GY_GRAPHICSLINEARTICK_H
#include "Graphics/BasicGraphics/GY_BasicsGraphicsObject.h"
#include "GY_ControlLibrary_global.h"
//#include "Graphics/GY_Object.h"
#include <QObject>

/**
 * @brief The GY_GraphicsLinearTick class
 * 线型刻度图形类
 */
class GY_CONTROLLIBRARY_EXPORT GY_GraphicsLinearTick:public GY_BasicsGraphicsObject
{
    Q_OBJECT
public:
    explicit Q_INVOKABLE GY_GraphicsLinearTick(const QString &guid,QGraphicsItem *parent = nullptr);
    /**
     * @brief GY_GraphicsLinearTick 构造函数
     * @param guid  图形唯一编码
     * @param startPoint 开始点坐标
     * @param endPoint 结束点坐标
     * @param tickNum 刻度数量
     * @param tickLenth 刻度长度
     * @param parent 父级Item
     */
     explicit Q_INVOKABLE GY_GraphicsLinearTick(const QString &guid,
                                                const QPointF &startPoint,const QPointF &endPoint,
                                                const int tickNum,
                                                const qreal tickLenth,
                          QGraphicsItem *parent = nullptr);
private:
    /**
     * @brief initializationPropertyInfo 初始化属性信息
     */
    void initializationPropertyInfo();
    /**
     * @brief UpdateDraw 更新绘制
     */
    void UpdateDraw();
    /**
     * @brief updateTickLenth 更新刻度线长度
     * @param name 属性名称
     * @param value 刻度数量
     * @return 是否更新成功
     */
    bool updateTickLenth(const QString &name, const QVariant &value);   
    /**
     * @brief updateNumTicks 更新刻度数量
     * @param name 属性名称
     * @param value 刻度数量
     * @return 是否更新成功
     */
    bool updateNumTicks(const QString &name, const QVariant &value);
    /**YYZ
     * @brief updateTickWidth 更新刻度线宽度
     * @param name 属性名称
     * @param value 刻度数量
     * @return 是否更新成功
     */
    bool updateTickWidth(const QString &name, const QVariant &value);
    /**
     * @brief precalculatedPosition 计算点位置
     * @param radius 半径
     * @param angele 角度
     * @return 计算得到的点位置
     */
    QPointF precalculatedPosition(const double radius, const double angele);
    /**
     * @brief updateStartPoint  更新开始点
     * @param name 属性名称
     * @param value 中心点位置
     * @return 是否更新成功
     */
    bool updateStartPoint(const QString &name, const QVariant &value);
    /**
     * @brief updateEndPoint  更新结束点
     * @param name 属性名称
     * @param value 中心点位置
     * @return 是否更新成功
     */
    bool updateEndPoint(const QString &name, const QVariant &value);
    /**YYZ
     * @brief updateTickWidthPoint  更新设置点
     * @param name 属性名称
     * @param value 中心点位置
     * @return 是否更新成功
     */
    bool updateTickWidthPoint(const QString &name,const QVariant &value);
    /**YYZ
     * @brief updateStartLengthPoint   更新开始长度点
     * @param name 属性名称
     * @param value 开始角度点
     * @return 是否更新成功
     */
    bool updateStartLengthPoint(const QString &name, const QVariant &value);
    //数据计算
    /**YYZ
     * @brief calculateTickWidthPointPosition   计算宽度编辑点位置
     */
    void calculateTickWidthPointPosition();
    /**YYZ
     * @brief precalculateAnglePointPosition
     * @param roundPoint
     * @param relateAngle 相对于中心点的角度
     * @return 计算点的坐标
     */
    QPointF precalculateAnglePointPosition(const QPointF &roundPoint,const double relateAngle);

};
#endif // GY_GRAPHICSLINEARTICK_H
